package com.cuit.controller;

import cn.hutool.core.util.StrUtil;
import com.cuit.common.Constants;
import com.cuit.common.Result;
import com.cuit.entity.User;
import com.cuit.entity.UserDto;
import com.cuit.mapper.UserMapper;
import com.cuit.service.LoginUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class LoginController {

    @Autowired
    LoginUserService loginUserService;

    @Autowired
    private UserMapper userMapper;

    /**
     * 处理用户登录请求
     *
     * @param userLogin 包含用户名和密码的用户登录信息
     * @return 登录结果，包括用户信息或错误信息
     */
    @PostMapping("/login")
    public Result login(@RequestBody UserDto userLogin) {
        // 获取用户名和密码
        String username = userLogin.getUsername();
        String password = userLogin.getPassword();

        // 检查用户名和密码是否为空
        if (StrUtil.isBlank(username) || StrUtil.isBlank(password)) {
            // 如果用户名或密码为空，返回错误信息
            return Result.error(Constants.CODE_401, "参数错误");
        }
        try {
            // 尝试通过用户名和密码进行登录验证
            String token = loginUserService.login(username, password);
            User user = userMapper.findByUsername(username, password);
            // 登录成功，返回包含token的成功结果
            return Result.success(user , token);
        } catch (RuntimeException e) {
            // 捕获运行时异常，表示登录失败，返回错误信息
            return Result.error(Constants.CODE_401,e.getMessage());
        }
    }

    /**
     * 处理用户注册请求
     *
     * @param userRegister 包含用户注册信息的DTO
     * @return 注册结果，包括用户信息
     */
    @PostMapping("/register")
    public Result register(@RequestBody UserDto userRegister){
        // 提取用户名和密码
        String username = userRegister.getUsername();;
        String password = userRegister.getPassword();

        // 检查用户名和密码是否为空
        if (StrUtil.isBlank(username) || StrUtil.isBlank(password)) {
            // 如果用户名或密码为空，返回错误信息
            return Result.error(Constants.CODE_401, "参数错误");
        }

        // 调用服务层方法执行注册操作
        User user = loginUserService.register(username,password);

        // 返回注册成功结果
        return Result.success(user);
    }
}
